home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
United Public Domain Gold 2
/
United Public Domain Gold 2.iso
/
utilities
/
pu083.dms
/
pu083.adf
/
Morse
/
mors4.0
< prev
next >
Wrap
Text File
|
1989-06-09
|
6KB
|
209 lines
REM REV 1.0 PROGRAM FOR MORSE CODE GENERATION. AUG/86 KMW. PTL.
' REV 2.0 NUMBERS ADDED 1/87 Kathy Wehr WB3KRN (@ K3RLI for packet mail)
' REV 4.0 REVISED SPEED FORMULAS & RANDOM CODE 9/20/88 BY W1JT,
' Emil J.Tanana. Feel free to change characters, timing and format
' to suit your own style. AmigaBasic lets you do it on the spot!
' Public Domain Notice: This is FREE ! Don't charge anyone for this
' program. If you are a Amateur Radio Operator, send a note with your
' name, call, & address to Kathy Wehr, RD#1 Box 193, Watsontown, PA
' 17777 to get receive Amigan Beacon Newsletter, and get info on
' AmigaNet, the Low Band Amigan Amateurs Net. If you have comments
' or improvements to this program, send them to the above address.
' I especially welcome comments on how to get the code speed more
' accurate.
CLEAR
RANDOMIZE TIMER
WIDTH 75
TOTAL=.0000001#:WRONG=.0000001#
PRINT" MORSE CODE GENERATOR.":PRINT :PRINT
CHANGE:
INPUT"ENTER PITCH OF TONE.(800HZ DEFAULT)";P$
IF P$="" THEN P$="800"
F=VAL(P$) 'sets tone frequency
PRINT :INPUT"ENTER CODE SPEED (DEFAULT=7) WORDS/MINUTE.";WPM$
IF WPM$="" THEN WPM$="7"
WPM=VAL(WPM$) 'sets code speed
'CALCULATE SPEED, DOT TIME
IF WPM < 13 THEN CWPM=13 ELSE CWPM =WPM
S=21.84/CWPM 'sets code element timing
IF WPM >= 13 THEN ELE=S ELSE ELE = (43.68 -1.68 * WPM) / WPM
PRINT:INPUT"DO YOU WANT TO RECEIVE MIXED LETTERS,NUMBERS AND PUNCTUATION? (Y/N)";NP$
IF NP$= "" THEN NP$= "Y"
NP$= UCASE$(NP$)
CHOOSE:
CLS
PRINT" ENTER:"
PRINT" C TO CHANGE SPEED, PITCH AND RECEIVING MODE"
PRINT" K FOR KEYBOARD SENDING."
PRINT" Q FOR RECEIVING QUIZ."
PRINT" R FOR RANDOM RECEIVING PRACTICE."
PRINT" S FOR RETURNING TO AMIGADOS."
INPUT R$:R$=UCASE$(R$)
IF R$="C" GOTO CHANGE
IF R$="Q" THEN
PRINT :PRINT "PRESS ESCAPE KEY TO FOR MENU."
PRINT"SPEED=";WPM;"WPM. TYPE CHAR SENT; < = AR, > = SK"
TOTAL=1: WRONG=0: Lno=0
GOTO QUIZ
END IF
IF R$="R" THEN
PRINT:PRINT"PRESS ESCAPE KEY FOR MENU."
PRINT"SPEED=";WPM;"WPM. 5 CHAR GROUPS; < = AR, > = SK": PRINT
NGRP=1:GOTO RAND
END IF
IF R$="S" THEN SYSTEM
IF R$="K" THEN
PRINT :PRINT "START TYPING. PRESS ESCAPE FOR MENU."
PRINT"SPEED=";WPM;"WPM. CHAR < = AR, > = SK"
GOTO GETAKEY
END IF
GOTO CHOOSE
GETAKEY:
I$= INKEY$: IF I$="" THEN GETAKEY
I= ASC(I$)
IF I=27 THEN CHOOSE
PRINT I$;
GOSUB 1000
GOTO GETAKEY
RAND:
'I IS THE RANDOM CHARACTER VARIABLE, I$ IS THE LETTER.
FOR D=1 TO 5
IF NP$= "Y" THEN
I=((INT(RND*47))+44)
IF I= 58 OR I= 59 THEN I= 45
ELSE
I=((INT(RND*43))+48)
IF I= 58 OR I=59 THEN I=72
END IF
IF I=61 THEN I=86
IF I=64 THEN I=63
I$= CHR$(I):PRINT I$;
GOSUB 1000
SOUND F,ELE*3,0,0 'CHAR SPACE
NEXT D
SOUND F,ELE*7,0,0 'WORD SPACE
PRINT " ";
NGRP=NGRP+1
IF NGRP=13 THEN PRINT: PRINT: NGRP=1
AN$=UCASE$(INKEY$) 'ROUTINE TO RETURN TO MENU
IF AN$="" THEN RAND ELSE AN=ASC(AN$):IF AN=27 THEN CHOOSE
GOTO RAND
QUIZ:
LOCATE 23,1:PRINT"SCORE = ";:PRINT USING "##.##";((100*((TOTAL-WRONG)/TOTAL)));
LOCATE 23,20:PRINT"TOTAL CHAR=";TOTAL;
IF NP$="Y" THEN
I=((INT(RND*47))+44)
IF I=58 OR I=59 THEN I = 45
ELSE
I=((INT(RND*43))+48)
IF I= 58 OR I=59 THEN I=86
END IF
IF I=61 THEN I=83
IF I=64 THEN I=47
I$=CHR$(I)
SEND:
GOSUB 1000:
TOTAL = TOTAL+1
Chno = TOTAL-(Lno*70)
ANSWER:
AN$ = UCASE$(INKEY$)
IF AN$ = "" THEN ANSWER
AN = ASC(AN$):IF AN=27 THEN CHOOSE
POSITION = Chno
LOCATE 12+Lno,POSITION:PRINT AN$;
IF AN$<>I$ THEN
WRONG = WRONG+1
TOTAL = TOTAL-1
GOTO SEND
END IF
IF TOTAL = (70+Lno*70) THEN
PRINT
Lno = Lno+1
END IF
GOTO QUIZ
1000 'Code Generator
C$=CHR$(ASC(I$) OR 32)
IF C$="a" THEN B$=".-":GOTO 2000
IF C$="b" THEN B$="-...":GOTO 2000
IF C$="c" THEN B$="-.-.":GOTO 2000
IF C$="d" THEN B$="-..":GOTO 2000
IF C$="e" THEN B$=".":GOTO 2000
IF C$="f" THEN B$="..-.":GOTO 2000
IF C$="g" THEN B$="--.":GOTO 2000
IF C$="h" THEN B$="....":GOTO 2000
IF C$="i" THEN B$="..":GOTO 2000
IF C$="j" THEN B$=".---":GOTO 2000
IF C$="k" THEN B$="-.-":GOTO 2000
IF C$="l" THEN B$=".-..":GOTO 2000
IF C$="m" THEN B$="--":GOTO 2000
IF C$="n" THEN B$="-.":GOTO 2000
IF C$="o" THEN B$="---":GOTO 2000
IF C$="p" THEN B$=".--.":GOTO 2000
IF C$="q" THEN B$="--.-":GOTO 2000
IF C$="r" THEN B$=".-.":GOTO 2000
IF C$="s" THEN B$="...":GOTO 2000
IF C$="t" THEN B$="-":GOTO 2000
IF C$="u" THEN B$="..-":GOTO 2000
IF C$="v" THEN B$="...-":GOTO 2000
IF C$="w" THEN B$=".--":GOTO 2000
IF C$="x" THEN B$="-..-":GOTO 2000
IF C$="y" THEN B$="-.--":GOTO 2000
IF C$="z" THEN B$="--..":GOTO 2000
IF C$="1" THEN B$=".----":GOTO 2000
IF C$="2" THEN B$="..---":GOTO 2000
IF C$="3" THEN B$="...--":GOTO 2000
IF C$="4" THEN B$="....-":GOTO 2000
IF C$="5" THEN B$=".....":GOTO 2000
IF C$="6" THEN B$="-....":GOTO 2000
IF C$="7" THEN B$="--...":GOTO 2000
IF C$="8" THEN B$="---..":GOTO 2000
IF C$="9" THEN B$="----.":GOTO 2000
IF C$="0" THEN B$="-----":GOTO 2000
IF C$="." THEN B$=".-.-.-":GOTO 2000
IF C$="?" THEN B$="..--..":GOTO 2000
IF C$="," THEN B$="--..--":GOTO 2000
IF C$="-" THEN B$="-...-":GOTO 2000
IF C$="/" THEN B$="-..-.":GOTO 2000
IF I$=" " THEN B$=" ":GOTO 2000
IF I$=CHR$(8) THEN 'BACKSPACE FOR SENDING ERROR
B$="........"
LOCATE ,POS(0)
PRINT"";
GOTO 2000
END IF
'IF I$=":" THEN B$="---...":GOTO 2000
'IF I$=";" THEN B$="-.-.-.":GOTO 2000
'IF I$="(" OR C$=")" THEN B$="-.--.-":GOTO 2000
'IF I$="+" OR I$="&" THEN B$=". ...":GOTO 2000
IF I$=">" THEN B$="...-.-":GOTO 2000 'USE > FOR SK
IF I$="<" THEN B$=".-.-.":GOTO 2000 'USE < FOR AR
C$="" :B$="":I$=""
2000 'SOUND ROUTINES
FOR E = 1 TO LEN(B$)
IF MID$(B$,E,1) ="." THEN
SOUND F,S,200
ELSEIF MID$(B$,E,1) ="-" THEN
SOUND F,S*3,200
ELSE
SOUND F,ELE*7,0
END IF
SOUND F,ELE,0 'SPACE AFTER DOT OR DASH
NEXT E 'GET THE NEXT DOT OR DASH IN THE CHAR
SOUND F,ELE*3,0 'SPACE AFTER CHAR
RETURN 'GET THE NEXT CHAR
END